package vip.xiaonuo.common.wechat;

import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.ObjectUtils;
import vip.xiaonuo.common.pojo.ExcelCalleeVo;
import vip.xiaonuo.common.util.CommonDateUtil;

import java.io.FileOutputStream;
import java.util.List;

/**
 * 邮件导出工具类
 */
public class EmailExcelUtils {
	// 催记Excel
	public static String createHistoryMediaWorkExcel(List<JSONObject> dataList, String dateName) throws Exception {
		Workbook workbook = new XSSFWorkbook();
		Sheet sheet = workbook.createSheet("催记数据");

		// 创建表头
		Row headerRow = sheet.createRow(0);
		headerRow.createCell(0).setCellValue("客户编号");
		headerRow.createCell(1).setCellValue("业务号");
		headerRow.createCell(2).setCellValue("客户姓名");
		headerRow.createCell(3).setCellValue("催收时间");
		headerRow.createCell(4).setCellValue("联络类型");
		headerRow.createCell(5).setCellValue("联络人类型");
		headerRow.createCell(6).setCellValue("联络人姓名");
		headerRow.createCell(7).setCellValue("联络号码");
		headerRow.createCell(8).setCellValue("联络地址");
		headerRow.createCell(9).setCellValue("结果代码");
		headerRow.createCell(10).setCellValue("承诺还款日期");
		headerRow.createCell(11).setCellValue("承诺还款金额");
		headerRow.createCell(12).setCellValue("备注");
		headerRow.createCell(13).setCellValue("主借款人住宅电话");
		headerRow.createCell(14).setCellValue("主借款人公司电话");
		headerRow.createCell(15).setCellValue("主借款人手机");
		headerRow.createCell(16).setCellValue("主借款人住宅地址");
		headerRow.createCell(17).setCellValue("主借款人单位地址");

		// 填充数据
		for (int i = 0; i < dataList.size(); i++) {
			JSONObject vo = dataList.get(i);
			String liaisonName = vo.getString("liaisonName");
			if (ObjectUtils.isEmpty(liaisonName)) {
				continue;
			}
			Row row = sheet.createRow(i + 1);
			row.createCell(0).setCellValue(vo.getString("custCode"));
			row.createCell(1).setCellValue(vo.getString("partnerBusinessId"));
			row.createCell(2).setCellValue(liaisonName);
			row.createCell(3).setCellValue(CommonDateUtil.formatMillisecondTime(vo.getLongValue("createTime")));
			// 手工电催
			row.createCell(4).setCellValue("01");
			// 通话对象1本人2配偶3父母4亲戚5朋友
			// 01 - 本人 02 - 配偶 03 - 父子（女） 04 - 母子（女） 05 - 子女 06 - 朋友 07 - 同事 08 - 兄弟姐妹 09 -
			// 其他
			String callRecipient = vo.getString("callRecipient");
			if (!ObjectUtils.isEmpty(callRecipient)) {
				switch (callRecipient) {
				case "本人":
					row.createCell(5).setCellValue("01");
					break;
				case "配偶":
					row.createCell(5).setCellValue("02");
					break;
				case "父子（女）":
				case "母子（女）":
					row.createCell(5).setCellValue("03");
					break;
				case "亲戚":
					row.createCell(5).setCellValue("08");
					break;
				case "朋友":
					row.createCell(5).setCellValue("07");
					break;
				default:
					row.createCell(5).setCellValue("09");
					break;
				}
			} else {
				row.createCell(5).setCellValue("09");
			}
			row.createCell(6).setCellValue(liaisonName);
			row.createCell(7).setCellValue(vo.getString("liaisonPhone"));
			row.createCell(8).setCellValue("");
			String remark = vo.getString("remark");
			// 结果代码，在案件详情-沟通记录坐席自己选的，如果结果代码为空，则默认是W06：外访无进展
			// row.createCell(9).setCellValue("W05".equals(vo.getString("resultCode")) ?
			// "W06" : vo.getString("resultCode"));
			// W06,完全无法联络
			remark=remark.trim();
			row.createCell(9).setCellValue(vo.getString("resultCode"));

			row.createCell(10).setCellValue(vo.getString("promiseRepaymentDay"));
			row.createCell(11).setCellValue(vo.getString("promiseRepaymentAmount"));
			row.createCell(12).setCellValue(remark);
			row.createCell(13).setCellValue("");
			row.createCell(14).setCellValue("");
			row.createCell(15).setCellValue("");
			row.createCell(16).setCellValue("");
			row.createCell(17).setCellValue("");
		}

		// 自动调整列宽
		for (int i = 0; i < 18; i++) {
			sheet.autoSizeColumn(i);
		}

		// 催记数据以 data- 开头 .xlsx或xls结尾
		String filePath = "data-" + dateName + ".xlsx";
		try (FileOutputStream fos = new FileOutputStream(filePath)) {
			workbook.write(fos);
		}
		workbook.close();
		return filePath;
	}

	// 催记Excel
	public static String createMediaWorkExcel(List<JSONObject> dataList) throws Exception {
		Workbook workbook = new XSSFWorkbook();
		Sheet sheet = workbook.createSheet("催记数据");

		// 创建表头
		Row headerRow = sheet.createRow(0);
		headerRow.createCell(0).setCellValue("客户编号");
		headerRow.createCell(1).setCellValue("业务号");
		headerRow.createCell(2).setCellValue("客户姓名");
		headerRow.createCell(3).setCellValue("催收时间");
		headerRow.createCell(4).setCellValue("联络类型");
		headerRow.createCell(5).setCellValue("联络人类型");
		headerRow.createCell(6).setCellValue("联络人姓名");
		headerRow.createCell(7).setCellValue("联络号码");
		headerRow.createCell(8).setCellValue("联络地址");
		headerRow.createCell(9).setCellValue("结果代码");
		headerRow.createCell(10).setCellValue("承诺还款日期");
		headerRow.createCell(11).setCellValue("承诺还款金额");
		headerRow.createCell(12).setCellValue("备注");
		headerRow.createCell(13).setCellValue("主借款人住宅电话");
		headerRow.createCell(14).setCellValue("主借款人公司电话");
		headerRow.createCell(15).setCellValue("主借款人手机");
		headerRow.createCell(16).setCellValue("主借款人住宅地址");
		headerRow.createCell(17).setCellValue("主借款人单位地址");

		// 填充数据
		for (int i = 0; i < dataList.size(); i++) {
			JSONObject vo = dataList.get(i);
			String liaisonName = vo.getString("liaisonName");
			if (ObjectUtils.isEmpty(liaisonName)) {
				continue;
			}
			Row row = sheet.createRow(i + 1);
			row.createCell(0).setCellValue(vo.getString("custCode"));
			row.createCell(1).setCellValue(vo.getString("partnerBusinessId"));
			row.createCell(2).setCellValue(liaisonName);
			row.createCell(3).setCellValue(CommonDateUtil.formatMillisecondTime(vo.getLongValue("createTime")));
			// 手工电催
			row.createCell(4).setCellValue("01");
			// 通话对象1本人2配偶3父母4亲戚5朋友
			// 01 - 本人 02 - 配偶 03 - 父子（女） 04 - 母子（女） 05 - 子女 06 - 朋友 07 - 同事 08 - 兄弟姐妹 09 -
			// 其他
			String callRecipient = vo.getString("callRecipient");
			if (!ObjectUtils.isEmpty(callRecipient)) {
				switch (callRecipient) {
				case "本人":
					row.createCell(5).setCellValue("01");
					break;
				case "配偶":
					row.createCell(5).setCellValue("02");
					break;
				case "父子（女）":
				case "母子（女）":
					row.createCell(5).setCellValue("03");
					break;
				case "亲戚":
					row.createCell(5).setCellValue("08");
					break;
				case "朋友":
					row.createCell(5).setCellValue("07");
					break;
				default:
					row.createCell(5).setCellValue("09");
					break;
				}
			} else {
				row.createCell(5).setCellValue("09");
			}
			row.createCell(6).setCellValue(liaisonName);
			row.createCell(7).setCellValue(vo.getString("liaisonPhone"));
			row.createCell(8).setCellValue("");
			// 结果代码，在案件详情-沟通记录坐席自己选的，如果结果代码为空，则默认是W06：外访无进展
			row.createCell(9)
					.setCellValue("W05".equals(vo.getString("resultCode")) ? "W06" : vo.getString("resultCode"));
			row.createCell(10).setCellValue(vo.getString("promiseRepaymentDay"));
			row.createCell(11).setCellValue(vo.getString("promiseRepaymentAmount"));
			row.createCell(12).setCellValue(vo.getString("remark"));
			row.createCell(13).setCellValue("");
			row.createCell(14).setCellValue("");
			row.createCell(15).setCellValue("");
			row.createCell(16).setCellValue("");
			row.createCell(17).setCellValue("");
		}

		// 自动调整列宽
		for (int i = 0; i < 18; i++) {
			sheet.autoSizeColumn(i);
		}

		// 催记数据以 data- 开头 .xlsx或xls结尾
		String filePath = "data-" + CommonDateUtil.getMillisecondTime() + ".xlsx";
		try (FileOutputStream fos = new FileOutputStream(filePath)) {
			workbook.write(fos);
		}
		workbook.close();
		return filePath;
	}

	// 邮件附件：每天拨打次数大于5的坐席
	public static String createExcel(List<ExcelCalleeVo> dataList) throws Exception {
		Workbook workbook = new XSSFWorkbook();
		Sheet sheet = workbook.createSheet("呼叫数据");

		// 创建表头
		Row headerRow = sheet.createRow(0);
		headerRow.createCell(0).setCellValue("坐席号");
		headerRow.createCell(1).setCellValue("被叫号码");
		headerRow.createCell(2).setCellValue("呼叫次数");
		headerRow.createCell(3).setCellValue("分中心");

		// 填充数据
		for (int i = 0; i < dataList.size(); i++) {
			ExcelCalleeVo vo = dataList.get(i);
			Row row = sheet.createRow(i + 1);
			row.createCell(0).setCellValue(vo.getAgentNum());
			row.createCell(1).setCellValue(vo.getCallee());
			row.createCell(2).setCellValue(vo.getCnt());
			row.createCell(3).setCellValue(vo.getDeptName());
		}

		// 自动调整列宽
		for (int i = 0; i < 4; i++) {
			sheet.autoSizeColumn(i);
		}

		String filePath = CommonDateUtil.getPreviousDayStr() + "手机号拨打次数大于5次的坐席.xlsx";
		try (FileOutputStream fos = new FileOutputStream(filePath)) {
			workbook.write(fos);
		}
		workbook.close();
		return filePath;
	}
}
